"""列表的查操作之使用切片一次获得多个元素"""

"""
    可以使用切片获得列表中的元素，一次可获得多个元素。
    语法格式：[start:stop:step]
    1.得到的切片依然是列表，是原始列表的片段的一份拷贝。
    2.得到的切片不包括索引stop对应的元素。
    3.若不指定step，其默认值为1，可简化为[start:stop]
    4.当step为正数时，
        不指定start，切片第一个元素默认是列表第一个元素。
        不指定stop，切片最后一个元素默认是列表最后一个元素。
        从索引start开始往后计算切片。
      当step为负数时，
        不指定start，切片第一个元素默认是列表最后一个元素。
        不指定stop，切片最后一个元素默认是列表第一个元素。
        从索引start开始往前计算切片。
"""
L = [5, 3, 9, 4, 0, 6, 8, 1, 7, 2]
print(L[1:7:2])  # [3, 4, 6]

print(L[1:7:])  # [3, 9, 4, 0, 6, 8]
print(L[1:7])  # [3, 9, 4, 0, 6, 8]

print(L[::])  # [5, 3, 9, 4, 0, 6, 8, 1, 7, 2]
print(L[6:0:-2])  # [8, 0, 9]
print(L[0:6:-2])  # []
print(L[6::-2])  # [8, 0, 9, 5]
print(L[:5:-2])  # [2, 1]

"""
    5.切片操作允许索引越界
"""
print(L[:100])  # [5, 3, 9, 4, 0, 6, 8, 1, 7, 2]
print(L[-100:])  # [5, 3, 9, 4, 0, 6, 8, 1, 7, 2]

"""
    6.可调用内置函数slice（类slice的构造方法）创建slice类型的对象
    三种方式：   
        1.slice(stop)
        2.slice(start,stop)
        3.slice(start,stop,step)
        start、stop和step的默认值都是None。
        slice(start,stop,step)与[start:stop:step]是等价的。
"""
L = [5, 3, 9, 4, 0, 6, 8, 1, 7, 2]
print(L[1:7:2])  # [3, 4, 6]
print(L[slice(1, 7, 2)])  # # [3, 4, 6]

print(L[::])  # [5, 3, 9, 4, 0, 6, 8, 1, 7, 2]
print(L[slice(None, None, None)])  # [5, 3, 9, 4, 0, 6, 8, 1, 7, 2]

print(L[1:7])  # [3, 9, 4, 0, 6, 8]
print(L[slice(1, 7)])  # [3, 9, 4, 0, 6, 8]
print(L[slice(1, 7, None)])  # [3, 9, 4, 0, 6, 8]

print(L[:7])  # [5, 3, 9, 4, 0, 6, 8]
print(L[slice(7)])  # [5, 3, 9, 4, 0, 6, 8]
print(L[slice(None, 7, None)])  # [5, 3, 9, 4, 0, 6, 8]
